Skip to content

fix: raise contrast, target sizes and visibility of small UI parts - #4074

Merged
AlexAndBear merged 1 commit into
mainfrom
fix/a11y-visual-batch
Oct 30, 2026
Merged

AlexAndBear merged 1 commit into
mainfrom
fix/a11y-visual-batch

Conversation

@AlexAndBear

@AlexAndBear AlexAndBear commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

Description

Small a11y fixes from our audit that change the look a bit, all with tokens and patterns the design system already has. No new elements.

  • Contrast: checkbox borders, the tile checkbox, the slider track, the empty upload progress bar and the highlighted select option now reach 3:1 against their background.
  • Target sizes: the mobile top bar icons and the search magnifiers get a 24x24 hit area without moving the icons.
  • Layout: the floating + button no longer covers the last controls in the sidebar, and long share, link and space names wrap instead of being cut off.
  • State: the active "Shares" / "Hidden Shares" segment shows the check icon our filter chips already use.
  • Cursor: the whole selection zone around a tile checkbox shows a pointer again. It lost it when the zone was moved out of the tile link for a11y reasons.

Not covered here: the parent folder link under search results is still below 24px (making it bigger would change the row height), and the tile checkbox is still below 3:1 on some mid-tone images.

Screenshots

Before After What changed
+ button vs sidebar (800px, Shares panel scrolled to the end) + button vs sidebar (800px, Shares panel scrolled to the end) before + button vs sidebar (800px, Shares panel scrolled to the end) after The + button no longer covers "Copy link" and "More options" of the last public link; the panel ends with free space below.
+ button vs sidebar (Versions panel) + button vs sidebar (Versions panel) before + button vs sidebar (Versions panel) after The last "Restore" button is no longer under the + button.
Tile checkbox border (zoomed) Tile checkbox border (zoomed) before Tile checkbox border (zoomed) after Border in the full outline colour: 2.97:1 → 4.23:1 on the tile background.
Table row checkbox on hover (zoomed) Table row checkbox on hover (zoomed) before Table row checkbox on hover (zoomed) after 2.97:1 → 4.23:1 on a hovered row, 3.11:1 → 4.5:1 on white rows. This applies to all checkboxes, they now use the same border colour as inputs and selects.
Tile checkbox over images Tile checkbox over images before Tile checkbox over images after White fill and full outline ring, so the box is easier to find on photos. Partly fixed: on mid-tone images the edge is still below 3:1 (grey 2.48 → 2.64).
Tile selection zone (dashed box, cursor drawn in) Tile selection zone (dashed box, cursor drawn in) before Tile selection zone (dashed box, cursor drawn in) after The whole 44px zone around the checkbox shows a pointer, not only the box itself. Disabled tiles keep the default cursor.
Grid size slider, light Grid size slider, light before Grid size slider, light after Track 1.10:1 → 4.5:1 against the background.
Grid size slider, dark Grid size slider, dark before Grid size slider, dark after Track 1.19:1 → 5.41:1.
Upload progress at 0%, light Upload progress at 0%, light before Upload progress at 0%, light after The bar used to be invisible while empty (1.06:1). It now has a 1px frame at 4.5:1.
Upload progress at 0%, dark Upload progress at 0%, dark before Upload progress at 0%, dark after Frame at 5.41:1.
Share invite after typing "mar", light Share invite after typing "mar", light before Share invite after typing "mar", light after The option Enter will pick gets the existing 1px keyboard outline (4.5:1) after typing, not only after arrow keys. Before it was only a 1.06:1 tint. Mouse clicks are unchanged.
Share invite after typing "mar", dark Share invite after typing "mar", dark before Share invite after typing "mar", dark after Outline at 5.41:1.
Mobile top bar (dashed boxes = hit areas) Mobile top bar (dashed boxes = hit areas) before Mobile top bar (dashed boxes = hit areas) after Search, feedback, bell and app switcher hit areas 20x20 → 24x24. The icons don't move (0 px difference without the boxes).
Top bar search magnifier (pink = hit area) Top bar search magnifier (pink = hit area) before Top bar search magnifier (pink = hit area) after Hit area 16x16 → 24x24, the icon stays in place, the "All files" chip moves 4px left.
Filter field magnifier ("Search for spaces") Filter field magnifier ("Search for spaces") before Filter field magnifier ("Search for spaces") after Hit area 16x16 → 24x24.
Shared with me, "Shares" active Shared with me, "Shares" active before Shared with me, "Shares" active after The active segment shows the check icon our filter chips already use, instead of only a 1.29:1 tint. It gets about 20px wider.
Shared with me, "Hidden Shares" active Shared with me, "Hidden Shares" active before Shared with me, "Hidden Shares" active after Same for the other segment.
Long share recipient name Long share recipient name before Long share recipient name after The name wraps instead of being cut off without a way to read it.
Long public link name Long public link name before Long public link name after The link name wraps.
Admin spaces list Admin spaces list before Admin spaces list after The full space name wraps in the name column.
Space sidebar header Space sidebar header before Space sidebar header after The full space name wraps.

Related Issue

  • none, a11y audit findings

How Has This Been Tested?

  • test environment: unit tests (Vitest), browser tests (Playwright) against a local OpenCloud, Chrome desktop and Pixel 7, light and dark theme
  • test case 1: unit tests for the behavior changes (select outline after typing and not after mouse use, active filter icon)
  • test case 2: every item checked in the browser against main with measured contrast ratios, hit areas and computed cursors, see the table
  • test case 3: pixel compare of untouched areas (desktop top bar, table at rest, mobile top bar icons): no unexpected differences
  • test case 4: axe on the touched views: no new violations, the target-size violation on the search magnifier is gone

Types of changes

  • Bugfix
  • Enhancement (a change that doesn't break existing code or deployments)
  • Breaking change (a modification that affects current functionality)
  • Technical debt (addressing code that needs refactoring or improvements)
  • Tests (adding or improving tests)
  • Documentation (updates or additions to documentation)
  • Maintenance (like dependency updates or tooling adjustments)

Checkbox borders, tile checkboxes, slider tracks, the upload progress
frame, the highlighted select option and the active inline filter now
reach 3:1, top bar and search icons get 24px targets, the + button no
longer covers sidebar controls, long names wrap and the tile selection
zone shows a pointer. All with existing design system tokens and patterns.
@AlexAndBear
AlexAndBear merged commit 7079516 into main Oct 30, 2026
30 checks passed
@AlexAndBear
AlexAndBear deleted the fix/a11y-visual-batch branch October 30, 2026 10:40
@github-project-automation github-project-automation Bot moved this from Needs Review to Done in OpenCloud Team Board Oct 30, 2026
@openclouders openclouders mentioned this pull request Nov 2, 2026
1 task
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants